use std::process;

extern crate clap;
use clap::{App, Arg};

use batch_replace::{run, Config};

fn main() {
    let matches = App::new("批量替换")
        .version("0.1")
        .author("James Bear. <jamesgrizzly@gmail.com>")
        .about("遍历当前文件夹下所有文件和子目录中的文件，并查找/替换文件中的某一字符串")
        .arg(
            Arg::with_name("后缀")
                .help("设置你想要处理的文件的后缀，比如.rs")
                .required(true)
                .index(1),
        )
        .arg(
            Arg::with_name("旧字符串")
                .help("设置你想要替换的字符串")
                .required(true)
                .index(2),
        )
        .arg(
            Arg::with_name("新字符串")
                .help("设置你想要将旧字符串替换成的内容")
                .required(false)
                .index(3),
        )
        .arg(Arg::with_name("q").short("q").help("让程序安静一些"))
        .arg(Arg::with_name("y").short("y").help("不再需要你确认"))
        .get_matches();

    let config = Config {
        extension: matches.value_of("后缀").unwrap().to_string(),
        old_string: matches.value_of("旧字符串").unwrap().to_string(),
        new_string: matches.value_of("新字符串").map(|s| s.to_string()),
        quite: matches.is_present("q"),
        no_confirm: matches.is_present("y"),
    };

    if let Err(e) = run(config) {
        println!("程序出错了: {}", e);

        process::exit(1);
    }
}
